<?php

if(!defined("VL_LEGAL")) die();

/**
 * Класс группы пользователей
 * @author vladimmi <vladimmi@ya.ru>
 */
class vlUserGroup
{
	/**
	 * Информация о группе
	 * @var mixed
	 */
	var $info;
	
	/**
	 * Конструктор
	 * @param int $id Идентификатор группы пользователей
	 * @return vlUserGroup
	 */
	function vlUserGroup($id=false)
	{
		$this->info=array("permissions"=>array());
		if($id) $this->getById($id);
	}
	
	/**
	 * Загрузить информацию о группе пользователей
	 * @param int $id Идентификатор группы пользователей
	 * @return bool Результат запроса
	 */
	function getById($id)
	{
		$API=&vlAPI::getInstance();
		$query="SELECT * FROM ".VL_TABLE_USERS_GROUPS." WHERE ugrp_id='".$id."'";
		$result=$API->db[VL_DBROLE_USERS]->query($query);
		if($result) {
			$this->info=$API->db[VL_DBROLE_USERS]->fetchAssoc($result);
			$this->info["title"]=json_decode($this->info["title"], true);
			$this->info["description"]=json_decode($this->info["description"], true);
			$this->info["permissions"]=explode(",", $this->info["permissions"]);
			$this->calcPermissions();
			return true;
		} else return false;
	}
	
	/**
	 * Получить список идентификаторов пользователей, принадлежащих к этой группе
	 * @return mixed Массив индентификаторов или false
	 */
	function listUserIds()
	{
		$API=&vlAPI::getInstance();
		$query="SELECT u_id FROM ".VL_TABLE_USERS." WHERE ugrp_id='".$this->info["ugrp_id"]."'";
		$result=$API->db[VL_DBROLE_USERS]->query($query);
		if($result) {
			$res=array();
			while($r=$API->db[VL_DBROLE_USERS]->fetchArray($result)) $res[]=$r[0];
			return $res;
		} else return false;
	}
	
	/**
	 * Рассчитать окончательные права пользователя
	 * @return void
	 */
	private function calcPermissions()
	{
		$API=&vlAPI::getInstance();
		$tmp=array();
		$minus=array();
		foreach($this->info["permissions"] as $p) {
			if($p=="overall") $tmp=$API->permissions->getShortList();
			elseif($p[0]=="-") $minus[]=substr($p, 1, strlen($p)-1);
			else $tmp[]=$p;
		}
		$tmp=array_diff($tmp, $minus);
		if(!is_array($tmp)) $tmp=array();
		$this->info["permissions"]=$tmp;
		$API->debug->dump("Вычисленные права группы пользователей '".$this->info["title"]["ru"]."'", $tmp);
	}
}

?>